package com.jiuqi.mobile.core.service.base;
import java.io.File;
import java.lang.reflect.Proxy;
import java.rmi.AlreadyBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RemoteObject;
import java.rmi.server.UnicastRemoteObject;
import com.jiuqi.mobile.core.service.base.test.LogProxy;
import com.jiuqi.mobile.core.service.base.test.PerformanceProxy;
import com.jiuqi.mobile.core.service.base.test.SmallWorld;
public class TestService {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws RemoteException,
AlreadyBoundException {
// ITest i=(ITest)UnicastRemoteObject.exportObject(new TestImpl(),0);
// Registry registry = LocateRegistry.createRegistry(9700);
// registry.bind("test", i);
// ManagerFactory mf =
// ManagerFactory.getInstance(TestManagerInvocationHandler.class);
// ITest test = mf.instance(ITest.class);
// User l = test.login("name", "password");
// System.out.println(l);
test3();
}
// private static void test1() throws RemoteException, AlreadyBoundException {
// ManagerFactory.setRemoteInvocation(TestManagerInvocationHandler.class);
// ManagerRemoteService mr = ManagerRemoteService.getInstance(9700);
// mr.addRemote(ITest.class);
// mr.start();
// }
//
// private static void test2() throws RemoteException, AlreadyBoundException {
// Class<? extends ManagerInvocationHandler> remoteInvocation = TestManagerInvocationHandler.class;
// // if(null == remoteInvocation) throw new
// // RemoteException("没有找到Remote Invocation Handler");
// Registry registry = LocateRegistry.createRegistry(9700);
// //
// Class<ITest> rm = ITest.class;
// ITest instance = ManagerFactory.getInstance(remoteInvocation).instance(
// rm);
// instance = (ITest) Proxy.newProxyInstance(instance.getClass()
// .getClassLoader(), new Class<?>[] { ITest.class },
// new PerformanceProxy(instance));
// UnicastRemoteObject.exportObject(instance);
// registry.bind(rm.getName(), instance);
// }
static void test3() {
try {
// Create remote object
// ClassLoader cl = new
// DynamicClassLoader2(Thread.currentThread().getContextClassLoader());
// new
// File("src/test/java").toURL() });
DynamicClassLoader cl = new DynamicClassLoader(new File("F:\\Users\\Modi\\workspace\\jiuqi\\mobile\\manager\\core\\target\\test-classes\\com\\jiuqi\\mobile\\core\\base\\test").toURL());
// Remote server = new SmallWorldImpl();
Remote server = (Remote) cl.findClass("SmallWorldImpl").newInstance();
// (Remote) cl.loadClass("SmallWorldImpl").newInstance();
// it should be DynamicRemoteStub
System.out.println("StubObject is: " +
RemoteObject.toStub((RemoteObject) server).getClass());
// add log proxy to the remote object
server = (Remote) Proxy.newProxyInstance(server.getClass()
.getClassLoader(),
new Class[] { SmallWorld.class },
new LogProxy(server));
// add performance proxy to the remote object
server = (Remote) Proxy.newProxyInstance(server.getClass()
.getClassLoader(),
new Class[] { SmallWorld.class },
new PerformanceProxy(server));
UnicastRemoteObject.exportObject(server);
// UnicastServerRef ref = new UnicastServerRef(true);
// DynamicRemoteStub stub1 = new DynamicRemoteStub(ref);
// DynamicStubHandler handler = new DynamicStubHandler();
// handler.setProxy(stub1);
// ref.exportObject(server, null, true);
Registry reg = LocateRegistry.createRegistry(1099);
reg.bind(SmallWorld.NAME, server);
} catch (Exception e) {
e.printStackTrace();
}
}
}